"""
面向对象包括2大主要特性:
1 封装
2 继承
3 多态
"""
"""
这里我们介绍  继承

单继承 语法是
class 子类名(父类名)    父类名 就是你要继承的类, 得到它的内容 而不用重新在写一遍代码
    类内容体    除了父类名里面的代码,要添加新内容的代码
"""


# 这个是父类
class 类_基础手机:
    序列号 = None
    厂商 = "华为"

    def 通信4G(self):
        print("正在使用4G通信")


# 定义一个子类
class 类_手机2023版(类_基础手机):  # 把上面类的内容继承到新类里
    面部识别ID = "20230087"

    def 通信5G(self):
        print("正在使用5G通信")

# ------------------------------------------------------


# 定义对象
手机1 = 类_手机2023版()

# 从输出结果来看 "类_手机2023版" 有父类的内容,也有自己的内容
print(手机1.厂商)   # 这个变量 是父类里的
手机1.通信4G()     # 这个方法 是父类里的
手机1.通信5G()     # 这个方法 是子类里的
print()

"""
多继承 语法是
class 子类名(父类名1, 父类名, 父类名3, 父类名N)    父类名 就是你要继承的类, 得到它的内容 而不用重新在写一遍代码
    类内容体    除了父类名里面的代码,要添加新内容的代码
"""


# 这个是父类1
class 类_手机:
    序列号 = None
    厂商 = "佳佳VO"

    def 通信4G(self):
        print("正在使用4G通信")


# 这个是父类2
class 类_读卡器:
    版本 = "第六代"
    厂商 = "海燕"

    def 读卡(self):
        print("正在读卡")

    def 写卡(self):
        print("正在写卡")


# 这个是父类3
class 类_红外线遥控器:
    类型 = "红外线遥控器"

    def 红外(self):
        print("红外线遥控器,已经开启")


# 来定义子类,继承上面的类内容
class 类_我的手机(类_手机, 类_读卡器, 类_红外线遥控器):  # 默认以继承顺序(从左到右)为了优先级
    pass
    # 这里我不想写内容了,但是语法要求要写内容,怎么办   这个关键字就可以加入


# 定义对象
我的手机 = 类_我的手机()
print(我的手机.厂商)  # 这里有个小问题 父类1和父类2 里都有 "厂商" 这个变量名. 存在覆盖问题
我的手机.写卡()
我的手机.红外()

"""
多继承的注意事项

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为了优先级
即: 先继承的保留,后继承的被覆盖

不只是成员变量,成员方法也是一样的
就像上面 print(我的手机.厂商) 里输出的是第一个父类的成员变量信息, 第2个父类由于有同名的 "厂商" 变量,所以被覆盖
"""